import Vue from 'vue'
import axios from 'axios'
import VueAxios from 'vue-axios'

Vue.use(VueAxios, axios)

// 导入Token工具包
import { getToken } from './token.js'
// 导入MessageBox
import { MessageBox } from 'element-ui'
// 导入router
import router from '@/router/index.js'

// 创建instance
const instance = axios.create({
  baseURL: 'https://autumnfish.cn/bignews/api/v1',
  timeout: 10000,
  headers:{'Content-Type':'application/x-www-form-urlencoded'},
//   transformRequest 允许在向服务器发送前,修改请求数据
// 只能用在'PUT'  'POST'  和  'PATCH'这几个请求方法
// 后面数组中的函数必须返回一个字符串,或ArrayBuffer,或Stream
transformRequest:[
    function(data,headers){
    // 对data进行任意转换处理
   if(data instanceof FormData){
       return data
   }else{
        // 把json格式参数转成key=value格式
    let sp = new URLSearchParams()
    for(let key in data){
        sp.append(key,data[key])
    }
    return sp
   }
}]
})

// 添加请求拦截器
instance.interceptors.request.use(
    function(config){
    // 在发送请求之前做些什么
    // 默认请求头中发token
    if(getToken()){
        config.headers.Authorization = getToken().token
    }
    return config
},
function (error){
    // 对请求错误做些什么
    return Promise.reject(error)
}

),
// 添加响应拦截器
instance.interceptors.response.use(
    function (response){
        // 对响应数据做点什么
        return response
    },
   function (error){
        // 对响应错误做点什么
        if(error.response.status == 403){
            // 弹窗提示
            MessageBox.alert('请先登录','友情提示',{
                confirmButtonText:'确定',
                callback:action =>{
                    // 跳转登录页
                    router.push('/login')
                }
            })
        }else{
            // 如果不是403,则不做任何处理
        }
        return Promise.reject(error)
    }
)


export default instance